using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Security;
using Microsoft.SharePoint.Administration;
using ElkiTools.SP2010.SoapExtensions.Managers;

namespace ElkiTools.SP2010.SoapExtensions.Features.ElkiTools.SP2010.SoapExtensions_FarmLevelFeature
{
    /// <summary>
    /// Cette classe gère les événements déclenchés lors de l'activation, la désactivation, l'installation, la désinstallation et la mise à niveau de fonctions.
    /// </summary>
    /// <remarks>
    /// Le GUID attaché à cette classe peut être utilisé lors de la compression et ne doit pas être modifié.
    /// </remarks>

    [Guid("71914851-54d0-4ba6-b53c-5b36dcfb2f11")]
    public class ElkiToolsSP2010EventReceiver : SPFeatureReceiver
    {
        /// <summary>
        /// Feature Activated : Ajout des SoapExtensions dans le fichier de configuration
        /// </summary>
        /// <param name="properties">Propriétés de l'EventReceiver</param>
        public override void FeatureActivated(SPFeatureReceiverProperties properties)
        {
            SPWebService service = SPWebService.ContentService;

            WebConfigModifManager.Add_SPWebConfigModif_Entries(service.WebConfigModifications, WebConfigModifManager.CST_Farm_SPWebConfigModifOwner);
            CommitContentServiceModifs();
        }

        /// <summary>
        /// Feature Deactivating : Suppression des SoapExtensions du fichier de configuration
        /// </summary>
        /// <param name="properties">Propriétés de l'EventReceiver</param>
        public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
        {
            SPWebService service = SPWebService.ContentService;

            WebConfigModifManager.Remove_SPWebConfigModif_Entries(service.WebConfigModifications, WebConfigModifManager.CST_Farm_SPWebConfigModifOwner);
            CommitContentServiceModifs();
        }

        /// <summary>
        /// Commit des modifications effectuées sur le fichier de configuration
        /// </summary>
        private static void CommitContentServiceModifs()
        {
            SPWebService.ContentService.Update();
            SPWebService.ContentService.ApplyWebConfigModifications();
        }


        // Supprimez les marques de commentaire de la méthode ci-dessous pour gérer l'événement déclenché après l'installation d'une fonction.

        //public override void FeatureInstalled(SPFeatureReceiverProperties properties)
        //{
        //}


        // Supprimez les marques de commentaire de la méthode ci-dessous pour gérer l'événement déclenché avant la désinstallation d'une fonction.

        //public override void FeatureUninstalling(SPFeatureReceiverProperties properties)
        //{
        //}

        // Supprimez les marques de commentaire de la méthode ci-dessous pour gérer l'événement déclenché lors de la mise à niveau d'une fonction.

        //public override void FeatureUpgrading(SPFeatureReceiverProperties properties, string upgradeActionName, System.Collections.Generic.IDictionary<string, string> parameters)
        //{
        //}
    }
}
